鐵人賽
React
javascript
nodejs
vscode
第七天!今天是第七天! 能夠堅持到七天,確實不簡單,今天的你,累積了一定的自信心,照鏡子都會忍不住多看一分鐘,真帥。
過去React
提倡使用class
進行component
的開發,坦白說,拜物件導向
深植人心這麼久,學習他也是理所當然的事。
不過,到了18年,React
發佈了React Hook
,可說是驚天動地,開始提倡functional component
的設計,解決了class component
代碼繁多,狀態控制複雜...等問題,讓程式更好維護。
沒學過class component
?別擔心,functional component
是你的好搭擋,就決定是你了。
今天我們就從React Hook
的第一招useState
來說起,
** 設計一個計數器,具備兩個按鈕 **
- 宣告一個變數,並透過button onClick event來進行相對的動作
- 按鈕1: 變數加1
- 按鈕2: 變數減1
<提醒>: 這個範例我們還沒使用useState,你可以觀察看看發生什麼事!
src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import Counter from "./components/Counter";
ReactDOM.render(
<Counter/>,
document.getElementById('root')
);
src/components/Counter.js
import React from "react";
// *
// 設計一個Counter,包含以下三個元件
// <title />
// <Button1 /> <Button2 />
// *
export default function Counter() {
let numState = 5; //<-- 給定一個預設值5
return (
<>
<h1>{numState}</h1>
<button
onClick={() => {
console.log("Counter+1");
return numState + 1;
}}
>
加1
</button>
<button
onClick={() => {
console.log("Counter-1");
return numState - 1;
}}
>
減1
</button>
</>
);
}
還記得React
提倡的virtual DOM
概念吧,要讓React
發揮效能,你得依循他訂下的規矩,將你的state
及setStateFunc
一起提交到中央,方便管理。
使用方法很簡單,依循下方三步驟即可
import React, {useState} from "react"; //<--Step1
function YOUR_COMPONENT(){
const [yourState, setYourStateFunc] = useState(初始值); //<--Step2
...
return(
...
<div> {setYourStateFunc(yourState+[任何運算])} </div> //<--Ste3: 在JSX中,使用你定義好的 setYourStateFunc
...
);
}
編輯src/components/Counter.js
import React, {useState} from "react";
// *
// 設計一個Counter,包含以下三個元件
// <title />
// <Button1 /> <Button2 />
// *
export default function Counter() {
const [numState, setNumState] = useState(5); //<-- 給定一個預設值5
return (
<>
<h1>{numState}</h1>
<button
onClick={() => {
console.log("Counter+1");
return setNumState(numState + 1);
}}
>
加1
</button>
<button
onClick={() => {
console.log("Counter-1");
return setNumState(numState - 1);
}}
>
減1
</button>
</>
);
}
我們新增一個button,並定義一組新的state
,來控制我們文字的背景顏色
編輯src/components/Counter.js
import React, { useState } from "react";
// *
// 設計一個Counter,包含以下三個元件
// <title />
// <Button1 /> <Button2 />
// *
export default function Counter() {
const [numState, setNumState] = useState(5); //<-- 給定一個預設值5
const [showColor, setShowColor] = useState(false); //<-- 給定預設的bgColor=white
return (
<>
<h1 style={{backgroundColor:showColor?"yellow":"white"}}>{numState}</h1>
<button
onClick={() => {
console.log("Counter+1");
return setNumState(numState + 1);
}}
>
加1
</button>
<button
onClick={() => {
console.log("Counter-1");
return setNumState(numState - 1);
}}
>
減1
</button>
<button
onClick={() => {
console.log("showColor is:"+showColor);
return setShowColor(!showColor);
}}
>
{showColor?"關閉":"打開"}
</button>
</>
);
}
當然可以
以上面的範例來說,我如果只想要用一個state控制Counter的邏輯運算及背景顏色
,你可以這麼寫
編輯src/components/Counter.js
import React, { useState } from "react";
// *
// 設計一個Counter,包含以下三個元件
// <title />
// <Button1 /> <Button2 />
// *
export default function Counter() {
const [stateList, setYourState] = useState({ value: 5, showColor: false }); //<-- 改用object來做狀態的控制
return (
<>
<h1 style={{ backgroundColor: stateList['showColor'] ? "yellow" : "white" }}>
{stateList["value"]}
</h1>
<button
onClick={() => {
console.log("Counter+1");
return setYourState({ ...stateList, value: stateList["value"] + 1 });
}}
>
加1
</button>
<button
onClick={() => {
console.log("Counter-1");
return setYourState({ ...stateList, value: stateList["value"] - 1 });
}}
>
減1
</button>
<button
onClick={() => {
console.log("showColor is:" + stateList['showColor']);
return setYourState({ ...stateList, showColor: !stateList["showColor"] });
}}
>
{stateList['showColor'] ? "關閉" : "打開"}
</button>
</>
);
}
1. 使用React Hook的第一招 useState 來控制畫面的邏輯
2. 了解到useState也可以吃不同的格式,包含object, array...等
React
官方的教學文件,讓自己從A->A+
吧